package com.io.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.Repository;

import java.io.Serializable;
import java.util.Map;

/**
 * The class/interface
 *
 * @author guodd
 * @version 1.0 use jdk 1.8
 */
@NoRepositoryBean
public interface BaseDaoI<T, ID> extends Repository<T, ID>, JpaRepository<T, ID> {
    /**
     * 保存数据
     *
     * @param o entity数据库映射对象
     * @return 保存实体对象
     */
    <S extends T> S doSave(S o);

    /**
     * 更新数据
     *
     * @param o entity数据库映射对象
     */
    void doUpdate(T o);

    /**
     * 删除数据
     *
     * @param o entity数据库映射对象
     */
    void doDelete(T o);

    /**
     * @param c          entity数据库映射对象
     * @param primaryKey 主键ID
     * @return 结果数据
     */
    T loadEntity(Class<T> c, Serializable primaryKey);

    /**
     * 获取实体对象
     *
     * @param c          entity数据库映射对象
     * @param primaryKey 主键ID
     * @return 结果数据
     */
    T getEntity(Class<T> c, Serializable primaryKey);

    /**
     * JPQL数据查询
     *
     * @param jpql 语句
     * @return 结果集
     */
    T getEntity(String jpql);

    /**
     * JPQL多参数查询
     *
     * @param jpql
     * @param params
     * @return
     */
    T getEntity(String jpql, Object... params);

    T getEntity(String jpql, Map<String, Object> params);
}
